home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 101-125 / scopedisk122 / bassub / hardcopy.sub < prev    next >
Text File  |  1995-03-19  |  5KB  |  178 lines

  1. 'Subroutines for doing graphic prints of a screen
  2. '
  3. SUB Hardcopy1(x%,y%,p.width%,p.height%,f1,f2,fl%) STATIC
  4.       mem.opt& = 2^0+2^16
  5.       p.io&    = AllocMem&(100,mem.opt&)
  6.       p.port&  = p.io&+62
  7.       IF p.io& = 0 THEN ERROR 7
  8.  
  9.       f.windo&     = WINDOW(7)
  10.       f.rastport&  = PEEKL(f.windo&+50)
  11.       f.width%     = PEEKW(f.windo&+112)
  12.       f.height%    = PEEKW(f.windo&+114)
  13.       f.screen&    = PEEKL(f.windo&+46)
  14.       f.viewport&  = f.screen&+44
  15.       f.colormap&  = PEEKL(f.viewport&+4)
  16.       f.vp.mode%   = PEEKW(f.viewport&+32)
  17.       
  18.       
  19.       p.sigBit%    = AllocSignal%(-1)
  20.       IF p.sigBit% = -1 THEN
  21.         CALL OneButtonRequest("No Signalbit free!","Aborting","Continue",which%)
  22.         CALL FreeMem(p.io&,100)
  23.         EXIT SUB
  24.       END IF
  25.       p.sigTask&   = FindTask&(0)
  26.       
  27.       POKE  p.port&+8,4
  28.       POKEL p.port&+10,p.port&+34
  29.       POKE  p.port&+15,p.sigBit%
  30.       POKEL p.port&+16,p.sigTask&
  31.       POKEL p.port&+20,p.port&+24
  32.       POKEL p.port&+28,p.port&+20
  33.       POKE  p.port&+34,ASC("P")
  34.       POKE  p.port&+35,ASC("R")
  35.       POKE  p.port&+36,ASC("T")
  36.       
  37.       CALL AddPort(p.port&)
  38.       
  39.       POKE  p.io&+8,5
  40.       POKEL p.io&+14,p.port&        
  41.       POKEW p.io&+28,11
  42.       POKEL p.io&+32,f.rastport&
  43.       POKEL p.io&+36,f.colormap&
  44.       POKEL p.io&+40,f.vp.mode%
  45.       POKEW p.io&+44,x%
  46.       POKEW p.io&+46,y%
  47.       POKEW p.io&+48,p.width%
  48.       POKEW p.io&+50,p.height%
  49.       POKEL p.io&+52,f.width%*f1
  50.       POKEL p.io&+56,f.height%*f2
  51.  
  52.       d.name$ = "printer.device"+CHR$(0)
  53.       status% = OpenDevice%(SADD(d.name$),0,p.io&,0)
  54.       IF status%<>0 THEN
  55.         CALL OneButtonRequest("Printer is not free.","Aborting","Continue",which%)
  56.         CALL FreeMem(p.io&,100)
  57.         CALL FreeSignal(p.sigBit%)
  58.         EXIT SUB
  59.       END IF
  60.       
  61.       ercond% = DoIO%(p.io&)
  62.      IF ercond%=0 THEN
  63.         msg1$="Print Finished"
  64.         msg2$=""
  65.      ELSE
  66.          msg1$="Print Error"
  67.         msg2$="Code #"+STR$(ercond%)
  68.      END IF
  69.       
  70.       CALL CloseDevice(p.io&)
  71.       CALL RemPort(p.port&)
  72.       CALL FreeMem(p.io&,100)
  73.       CALL FreeSignal(p.sigBit%)
  74.      CALL OneButtonRequest(msg1$,msg2$,"Continue",which%)
  75. END SUB
  76.          
  77. SUB Hardcopy2(na$,x&,y&,p.width%,p.height%,f1,f2,fl%) STATIC
  78.       f.windo&   = WINDOW(7)
  79.       f.reg&     = PEEKL(f.windo&+66)
  80.       WHILE f.reg&>0
  81.         f.windo&   = f.reg&
  82.         f.reg&     = PEEKL(f.windo&+66)
  83.       WEND
  84.       
  85.       finder:
  86.       f.title&     = PEEKL(f.windo&+32)
  87.       check%       = PEEK(f.title&+count%)
  88.       WHILE check%>0
  89.         check$     = check$+CHR$(check%)
  90.         count%     = count%+1
  91.         check%     = PEEK(f.title&+count%)
  92.       WEND
  93.       found$       = check$:check$="":count%=0
  94.       IF UCASE$(found$)<>UCASE$(na$) THEN
  95.         f.windo&   = PEEKL(f.windo&+70)
  96.         IF f.windo&>0 THEN
  97.           GOTO finder
  98.         ELSE
  99.           CALL OneButtonRequest("Window does not exist!","Aborting","Continue",which%)
  100.           EXIT SUB
  101.         END IF
  102.       END IF
  103.               
  104.       mem.opt&  = 2^0+2^16
  105.       p.io&     = AllocMem&(100,mem.opt&)
  106.       p.port&   = p.io&+62
  107.       IF p.io&  = 0 THEN ERROR 7
  108.      
  109.       f.rastport& = PEEKL(f.windo&+50)
  110.       f.width%    = PEEKW(f.windo&+112)
  111.       f.height%   = PEEKW(f.windo&+114)
  112.       f.screen&   = PEEKL(f.windo&+46)
  113.       f.viewport& = f.screen&+44
  114.       f.colormap& = PEEKL(f.viewport&+4)
  115.       f.vp.mode%  = PEEKW(f.viewport&+32)
  116.       
  117.       
  118.       p.sigBit% = AllocSignal%(-1)
  119.       IF p.sigBit% = -1 THEN
  120.         CALL OneButtonRequest("No Signalbit free!","Aborting","Continue",which%)
  121.         CALL FreeMem(p.io&,100)
  122.         EXIT SUB
  123.       END IF
  124.       p.sigTask&=FindTask&(0)
  125.       
  126.       POKE  p.port&+8,4
  127.       POKEL p.port&+10,p.port&+34
  128.       POKE  p.port&+15,p.sigBit%
  129.       POKEL p.port&+16,p.sigTask&
  130.       POKEL p.port&+20,p.port&+24
  131.       POKEL p.port&+28,p.port&+20
  132.       POKE  p.port&+34,ASC("P")
  133.       POKE  p.port&+35,ASC("R")
  134.       POKE  p.port&+36,ASC("T")
  135.       
  136.       CALL AddPort(p.port&)
  137.       
  138.       POKE  p.io&+8,5
  139.       POKEL p.io&+14,p.port&        
  140.       POKEW p.io&+28,11
  141.       POKEL p.io&+32,f.rastport&
  142.       POKEL p.io&+36,f.colormap&
  143.       POKEL p.io&+40,f.vp.mode%
  144.       POKEW p.io&+44,x%
  145.       POKEW p.io&+46,y%
  146.       POKEW p.io&+48,p.width%
  147.       POKEW p.io&+50,p.height%
  148.       POKEL p.io&+52,f.width%*f1
  149.       POKEL p.io&+56,f.height%*f2
  150.       POKEW p.io&+60,fl%
  151.  
  152.       d.name$ = "printer.device"+CHR$(0)
  153.       status% = OpenDevice%(SADD(d.name$),0,p.io&,0)
  154.       IF status%<>0 THEN
  155.         CALL OnebuttonRequest("Printer is not free.","Aborting","Continue",which%)
  156.         CALL FreeMem(p.io&,100)
  157.         CALL FreeSignal(p.sigBit%)
  158.         EXIT SUB
  159.       END IF
  160.       
  161.       ercond% = DoIO%(p.io&)
  162.      IF ercond%=0 THEN
  163.         msg1$="Print Finished"
  164.         msg2$=""
  165.      ELSE
  166.          msg1$="Print Error"
  167.         msg2$="Code #"+STR$(ercond%)
  168.      END IF
  169.       
  170.       CALL CloseDevice(p.io&)
  171.       CALL RemPort(p.port&)
  172.       CALL FreeMem(p.io&,100)
  173.       CALL FreeSignal(p.sigBit%)
  174.      CALL OneButtonRequest(msg1$,msg2$,"Continue",which%)
  175. END SUB
  176.  
  177.       
  178.